'''
Python 的元组（tuple，简写为tup）与列表类似，不同之处在于元组的元素不能修改。
'''
# 不可变
t = (1, 2, 3)
# t[0] = 100  # 错误：TypeError: 'tuple' object does not support item assignment

#有序性
coords = (3, 5)
print(coords[0])  # 输出: 3

#可以包含不同类型的元素
mixed = (1, "apple", True)


#切片访问 序列都一样
t = (10, 20, 30)
print(t[1])         # 索引访问：20
print(t[-1])        # 反向索引：30
print(t[1:3])       # 切片：(20, 30)


#拼接和重复
t1 = (1, 2)
t2 = (3, 4)
print(t1 + t2)      # 拼接：(1, 2, 3, 4)
print(t1 * 3)       # 重复：(1, 2, 1, 2, 1, 2)

#成员检查和迭代
t = ('a', 'b', 'c')
print('b' in t)     # 成员检查：True

for item in t:      # 迭代
    print(item, end=' ')  # 输出: a b c


# 常用函数
t = ('5', '4', '8')
len(t)
max(t)
min(t)
list2tuple = tuple([1,2,3])





#序列解包

## 标准解包
a, b, c = (1, 2, 3)  # a=1, b=2, c=3

## 部分解包（使用 *）
head, *tail = (1, 2, 3, 4)  # head=1, tail=[2, 3, 4]

## 交换变量
a, b = b, a  # 无需临时变量


# 比较
import operator
operator.eq(t,t)




#命名元组（NamedTuple）
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = (Point(3, 4),Point(2, 1),Point(0, 7))
print(p[0].x)            # 输出: 3
print(p[1].y)



import sys
t = (1, 2, 3)
l = [1, 2, 3]
print(sys.getsizeof(t))  # 通常为 72 字节
print(sys.getsizeof(l))  # 通常为 88 字节

#单元素元组必须加逗号：
wrong = (1)       # 这是整数 1
correct = (1,)    # 这是元组 (1,)
print(type(wrong))  # int
print(type(correct)) #tuple
